A device can have one or more central processing units (CPUs) and one or more graphics processing units (GPUs). Each of the CPUs is a general-purpose processing device such as a microprocessor or another type of processor and is used for general computing tasks of the device. In addition, each of the GPUs is a specialized electronic circuit designed to rapidly manipulate and alter memory to accelerate the creation of images in a frame buffer intended for output to a display. Recently, these GPUs can be used as general-purpose computation on GPUs for a computer task. A general-purpose computation on GPUs is the utilization of a GPU, which typically handles computation only for computer graphics, to perform computation in processes traditionally handled by the CPU. For example, a GPU providing a functional set of operations performed on arbitrary bits can be used for general-purpose computation on GPUs. Additionally, the use of multiple graphics cards in one computer, or large numbers of graphics chips, further parallelizes the already parallel nature of graphics processing. For example, a GPU can be used for an OpenCL or a Compute Unified Device Architecture (CUDA) compute task.
A problem for general-purpose computation on GPUs is that the physical memory for the object being accessed by a GPU needs to be pinned so that the object memory cannot be paged out to disk. This is because the GPU cannot access the object memory using the virtual memory address of the object memory. By pinning the object memory, this adds memory pressure to the device, because the operating system cannot page this memory out to disk storage. For example, if the object is an image or another graphics object, the memory object is pinned can be quite large.